package dian.qing.li.demo.security.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import dian.qing.li.demo.security.bean.RoleParam;
import dian.qing.li.demo.security.dto.RoleDto;

import java.util.List;

/**
 * <p>
 * 角色表 服务类
 * </p>
 *
 * @author admin
 * @since 2020-07-01
 */
public interface RoleService extends IService<RoleDto> {

    /**
     * 分页列表
     *
     * @param param 参数
     * @param page  分页
     * @author: liqingdian
     */
    Page<RoleDto> pages(RoleParam param, Page page);

    /**
     * 角色详情
     *
     * @param id 主键
     * @author: liqingdian
     */
    RoleDto find(Integer id);

    /**
     * 角色详情
     *
     * @param roleCode 角色编码
     * @author: liqingdian
     */
    RoleDto find(String roleCode);

    /**
     * 用户角色列表
     *
     * @param userCode 用户账号
     * @author: liqingdian
     */
    List<RoleDto> listByUser(String userCode);

    /**
     * 新建
     *
     * @param inserted 新建
     * @author: liqingdian
     */
    boolean inserted(RoleDto inserted);

    /**
     * 更新
     *
     * @param updated 更新
     * @author: liqingdian
     */
    boolean updated(RoleDto updated);

    /**
     * 是否禁用
     *
     * @param id       主键
     * @param disabled 是否禁用
     * @author: liqingdian
     */
    boolean disabled(Integer id, boolean disabled);

    /**
     * 删除
     *
     * @param id 主键
     * @author: liqingdian
     */
    boolean deleted(Integer id);

    /**
     * 授予角色
     *
     * @param roleCode  角色编码
     * @param userCodes 用户列表
     * @author: liqingdian
     */
    boolean grantUsers(String roleCode, List<String> userCodes);

    /**
     * 取消角色
     *
     * @param roleCode  角色编码
     * @param userCodes 用户列表
     * @author: liqingdian
     */
    boolean cancelUsers(String roleCode, List<String> userCodes);

    /**
     * 授予权限
     *
     * @param roleCode  角色编码
     * @param authCodes 权限列表
     * @author: liqingdian
     */
    boolean grantAuths(String roleCode, List<String> authCodes);

    /**
     * 取消权限
     *
     * @param roleCode  角色编码
     * @param authCodes 权限列表
     * @author: liqingdian
     */
    boolean cancelAuths(String roleCode, List<String> authCodes);

}
